package com.firefly.mobile.app.util;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {

	/** yyyy-MM-dd */
	public static final String FORMAT_YYYY_MM_DD = "yyyy-MM-dd";

	/** yyyyMMdd */
	public static final String FORMAT_YYYYMMDD = "yyyyMMdd";

	/** yyMMdd */
	public static final String FORMAT_YYMMDD = "yyMMdd";

	/** yyyy-MM-dd HH:mm:ss */
	public static final String FORMAT_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

	/** yyyyMMddHHmmss */
	public static final String FORMAT_YYYYMMDDHHMMSS = "yyyyMMddHHmmss";

	/** HH:mm:ss */
	public static final String FORMAT_HH_MM_SS = "HH:mm:ss";

	/** HHmmss */
	public static final String FORMAT_HHMMSS = "HHmmss";

	/**
	 * 字符串 转 日期
	 * 
	 * @param dateString 日期字符串
	 * @param pattern 格式化样式
	 * @return 日期对象
	 */
	public static final Date parseDate(String dateString, String pattern) {
		Date date = null;
		if (StringUtils.isEmpty(dateString)) return null;
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(pattern);
			date = sdf.parse(dateString);
		} catch (Exception e) {
			// do nothing
		}
		return date;
	}

	/**
	 * 日期对象格式化
	 * 
	 * @param date 日期对象
	 * @param pattern 格式化样式
	 * @return 字符串日期
	 */
	public static final String formatDate(Date date, String pattern) {
		String v = null;
		try {
			if (date == null) return null;
			SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
			v = dateFormat.format(date);
		} catch (Exception e) {
			// do nothing
		}
		return v;
	}

	
	
	/**
	 * 日期字符串之间的类型转换.
	 * <p>
	 * 例如:convertDate("2012-01-02", "yyyy-MM-dd", "yyyy/mm/dd")返回2012/01/02
	 * </p>
	 * 
	 * @param source 待处理的日期字符串
	 * @param sformat 原来的格式
	 * @param dformat 新的格式
	 * @return 转换后的日期字符串
	 */
	public static String convertDate(String source, String sformat, String dformat) {
		// 参数检查
		if (StringUtils.isEmpty(source) || StringUtils.isEmpty(sformat) || StringUtils.isEmpty(dformat)) return source;
		// 开始转换
		String newString = formatDate(parseDate(source, sformat), dformat);
		// 如果转换失败返回原始字符串
		return (newString == null) ? source : newString;
	}

	/**
	 * 获得当前日期字符串,格式为 yyyyMMdd
	 * 
	 * @return 当前日期字符串(yyyyMMdd)
	 */
	public static String getCurrDate_YYYYMMDD() {
		return formatDate(new Date(), FORMAT_YYYYMMDD);
	}

	/**
	 * 获得当前日期字符串,格式为 yyyy-MM-dd
	 * 
	 * @return 当前日期字符串(yyyy-MM-dd)
	 */
	public static String getCurrDate_YYYY_MM_DD() {
		return formatDate(new Date(), FORMAT_YYYY_MM_DD);
	}

	/**
	 * 获得当前日期字符串,格式为 yyyy-MM-dd HH:mm:ss
	 * 
	 * @return 当前日期字符串(yyyy-MM-dd HH:mm:ss)
	 */
	public static String getCurrDate_YYYY_MM_DD_HH_MM_SS() {
		return formatDate(new Date(), FORMAT_YYYY_MM_DD_HH_MM_SS);
	}

	/**
	 * 获得当前日期字符串,格式为 yyyyMMddHHmmss
	 * 
	 * @return 当前日期字符串(yyyyMMddHHmmss)
	 */
	public static String getCurrTime_YYYYMMDDHHMMSS() {
		return formatDate(new Date(), FORMAT_YYYYMMDDHHMMSS);
	}


}
